﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Unimaq.FacturaDBS_Spring.WinForms_Presentacion
{
    public partial class Principal : Form
    {
        public Principal()
        {
            InitializeComponent();
        }

        #region Cabecera
        private void btnCargar_Click(object sender, EventArgs e)
        {
            LogicaNegocio.DBS_Header_FacturaBLL dbs_HeaderBLL = new LogicaNegocio.DBS_Header_FacturaBLL();
            LogicaNegocio.CabeceraFacturaBLL spring_HeaderBLL = new LogicaNegocio.CabeceraFacturaBLL();

            //leemos la cabecera de facturas
            List<Entidades.DBS_Header_Factura> listaDBS = dbs_HeaderBLL.Listar();

            grid_DBS_Header.DataSource = null;
            grid_DBS_Header.DataSource = listaDBS;
            grid_DBS_Header.ClearSelection();

            lbl_DBS_filas.Text = listaDBS.Count.ToString("N");

            //convertimos al formato spring
            List<Entidades.Spring.FacturaSpring_Cabecera2> listaSpring = spring_HeaderBLL.ToSpring_Cabecera(listaDBS);

            grid_Spring_Header.DataSource = null;
            grid_Spring_Header.DataSource = listaSpring;
            grid_Spring_Header.ClearSelection();

            lbl_Spring_filas.Text = listaSpring.Count.ToString("N");

        }

        private void btnCabecera_Exportar_Click(object sender, EventArgs e)
        {
            List<Entidades.Spring.FacturaSpring_Cabecera2> gridBound = grid_Spring_Header.DataSource as List<Entidades.Spring.FacturaSpring_Cabecera2>;

            if (gridBound != null)
            {
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.Filter = "Archivo separado por tabulaciones (*.txt)|*.txt";
                saveDialog.FileName = string.Format("DBS_SPRING_CAB_{0}", DateTime.Now.ToString("ddMMyyyy"));

                LogicaNegocio.CabeceraFacturaBLL cabeceraFacturaBLL =
                    new LogicaNegocio.CabeceraFacturaBLL();

                if (saveDialog.ShowDialog() == DialogResult.OK)
                {
                    switch (saveDialog.FilterIndex)
                    {
                        case 1:
                            cabeceraFacturaBLL.exportarArchivo(saveDialog.FileName, gridBound, "TXT");
                            MessageBox.Show(string.Format("Archivo guardado correctamente en:\n{0}", saveDialog.FileName), "DBS-Spring", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                            break;
                    }
                }
            }
            else
            {
                MessageBox.Show("No hay registros en la cuadrícula.", "DBS-Spring", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }
        #endregion

        #region Repuestos
        private void btnFRptos_Cargar_Click(object sender, EventArgs e)
        {
            LogicaNegocio.CentroCosto.UC.DetalleFactura_UCRepuestosBLL detalleFact_RptosBLL =
                new LogicaNegocio.CentroCosto.UC.DetalleFactura_UCRepuestosBLL();

            List<Entidades.CentroCosto.UC.DBS_Head_Detail_Factura_UCRepuestos> lista = detalleFact_RptosBLL.ListarFacturaRepuestos();
            detalleFact_RptosBLL.CargarDetalle_LineAD_UCRepuestos(lista);

            List<Entidades.Spring.FacturaSpring_Detalle> result = detalleFact_RptosBLL.ToSpring_Detalle(lista);

            gridFactRepuestos.DataSource = null;
            gridFactRepuestos.DataSource = result;
            gridFactRepuestos.ClearSelection();

            lblfilas_Facturas.Text = result.Count.ToString("N");
        }

        private void btnNC_Cargar_Click(object sender, EventArgs e)
        {
            LogicaNegocio.CentroCosto.UC.DetalleFactura_UCRepuestosBLL detalleFact_RptosBLL =
                new LogicaNegocio.CentroCosto.UC.DetalleFactura_UCRepuestosBLL();

            List<Entidades.CentroCosto.UC.DBS_Head_Detail_NotaCredito_UCRepuestos> lista = detalleFact_RptosBLL.ListarNotaCreditoRepuestos();
            List<Entidades.CentroCosto.UC.DBS_Head_Detail_NotaCredito_UCRepuestos> listaAgrupada = detalleFact_RptosBLL.GetFilas_Agrupadas(detalleFact_RptosBLL.GetFilasNoDuplicados(lista), lista);
            List<Entidades.Spring.FacturaSpring_Detalle> result = detalleFact_RptosBLL.ToSpring_Detalle(listaAgrupada);

            gridNotaCRepuestos.DataSource = null;
            gridNotaCRepuestos.DataSource = result;
            gridNotaCRepuestos.ClearSelection();

            lblFilas_NotasCredito.Text = result.Count.ToString("N");
        }

        private void btnFRptos_Exportar_Click(object sender, EventArgs e)
        {
            List<Entidades.Spring.FacturaSpring_Detalle> gridBound = gridFactRepuestos.DataSource as List<Entidades.Spring.FacturaSpring_Detalle>;

            if (gridBound != null)
            {
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.Filter = "Archivo separado por tabulaciones (*.txt)|*.txt";
                saveDialog.FileName = string.Format("UC_RP_{0}", DateTime.Now.ToString("ddMMyyyy"));

                LogicaNegocio.CentroCosto.UC.DetalleFactura_UCRepuestosBLL detalleFactura_repuestosBLL =
                    new LogicaNegocio.CentroCosto.UC.DetalleFactura_UCRepuestosBLL();

                if (saveDialog.ShowDialog() == DialogResult.OK)
                {
                    switch (saveDialog.FilterIndex)
                    {
                        case 1:
                            detalleFactura_repuestosBLL.exportarArchivo(saveDialog.FileName, gridBound, "TXT");
                            MessageBox.Show(string.Format("Archivo guardado correctamente en:\n{0}", saveDialog.FileName), "DBS-Spring", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                            break;
                    }
                }
            }
            else
            {
                MessageBox.Show("No hay registros en la cuadrícula.", "DBS-Spring", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btnNC_Exportar_Click(object sender, EventArgs e)
        {
            List<Entidades.Spring.FacturaSpring_Detalle> gridBound = gridNotaCRepuestos.DataSource as List<Entidades.Spring.FacturaSpring_Detalle>;

            if (gridBound != null)
            {
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.Filter = "Archivo separado por tabulaciones (*.txt)|*.txt";
                saveDialog.FileName = string.Format("UC_RPD_{0}", DateTime.Now.ToString("ddMMyyyy"));

                LogicaNegocio.CentroCosto.UC.DetalleFactura_UCRepuestosBLL detalleFactura_repuestosBLL =
                    new LogicaNegocio.CentroCosto.UC.DetalleFactura_UCRepuestosBLL();

                if (saveDialog.ShowDialog() == DialogResult.OK)
                {
                    switch (saveDialog.FilterIndex)
                    {
                        case 1:
                            detalleFactura_repuestosBLL.exportarArchivo(saveDialog.FileName, gridBound, "TXT");
                            MessageBox.Show(string.Format("Archivo guardado correctamente en:\n{0}", saveDialog.FileName), "DBS-Spring", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                            break;
                    }
                }
            }
            else
            {
                MessageBox.Show("No hay registros en la cuadrícula.", "DBS-Spring", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }
        #endregion

        #region Servicios
        private void btnFRServFAMA_Cargar_Click(object sender, EventArgs e)
        {
            LogicaNegocio.CentroCosto.UD.DetalleFactura_UDServicios_FamaBLL detalleFact_ServBLL =
                new LogicaNegocio.CentroCosto.UD.DetalleFactura_UDServicios_FamaBLL();

            //
            List<Entidades.CentroCosto.UD.DBS_Head_Detail_UDServicios> lista = detalleFact_ServBLL.ListarFacturasServiciosFAMA();
            //
            List<Entidades.CentroCosto.UD.DBS_Head_Detail_UDServicios> listaAgrupada = detalleFact_ServBLL.GetFilas_Agrupadas(detalleFact_ServBLL.GetFilasNoDuplicados(lista), lista);
            List<Entidades.Spring.FacturaSpring_Detalle> result = detalleFact_ServBLL.ToSpring_Detalle(listaAgrupada);

            gridFactServ_FAMA.DataSource = null;
            gridFactServ_FAMA.DataSource = result;
            gridFactServ_FAMA.ClearSelection();

            lblFilas_FServFAMA.Text = result.Count.ToString("N");
        }

        private void btnFRServOT_Cargar_Click(object sender, EventArgs e)
        {
            LogicaNegocio.CentroCosto.UD.DetalleFactura_UDServicios_FamaBLL detalleFact_ServBLL =
                new LogicaNegocio.CentroCosto.UD.DetalleFactura_UDServicios_FamaBLL();

            //
            List<Entidades.CentroCosto.UD.DBS_Head_Detail_UDServicios> lista = detalleFact_ServBLL.ListarFacturasServiciosOT();
            //
            List<Entidades.CentroCosto.UD.DBS_Head_Detail_UDServicios> listaAgrupada = detalleFact_ServBLL.GetFilas_Agrupadas(detalleFact_ServBLL.GetFilasNoDuplicados(lista), lista);
            List<Entidades.Spring.FacturaSpring_Detalle> result = detalleFact_ServBLL.ToSpring_Detalle(listaAgrupada);

            gridFactServ_OT.DataSource = null;
            gridFactServ_OT.DataSource = result;
            gridFactServ_OT.ClearSelection();

            lblFilas_FServOT.Text = result.Count.ToString("N");
        }

        private void btnFRServFAMA_Exportar_Click(object sender, EventArgs e)
        {
            List<Entidades.Spring.FacturaSpring_Detalle> gridBound = gridFactServ_FAMA.DataSource as List<Entidades.Spring.FacturaSpring_Detalle>;

            if (gridBound != null)
            {
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.Filter = "Archivo separado por tabulaciones (*.txt)|*.txt";
                saveDialog.FileName = string.Format("UD_FAMA_{0}", DateTime.Now.ToString("ddMMyyyy"));

                LogicaNegocio.CentroCosto.UD.DetalleFactura_UDServicios_FamaBLL detalleFactura_serviciosBLL =
                    new LogicaNegocio.CentroCosto.UD.DetalleFactura_UDServicios_FamaBLL();

                if (saveDialog.ShowDialog() == DialogResult.OK)
                {
                    switch (saveDialog.FilterIndex)
                    {
                        case 1:
                            detalleFactura_serviciosBLL.exportarArchivo(saveDialog.FileName, gridBound, "TXT");
                            MessageBox.Show(string.Format("Archivo guardado correctamente en:\n{0}", saveDialog.FileName), "DBS-Spring", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                            break;
                    }
                }
            }
            else
            {
                MessageBox.Show("No hay registros en la cuadrícula.", "DBS-Spring", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btnFRServ_OT_Click(object sender, EventArgs e)
        {
            List<Entidades.Spring.FacturaSpring_Detalle> gridBound = gridFactServ_OT.DataSource as List<Entidades.Spring.FacturaSpring_Detalle>;

            if (gridBound != null)
            {
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.Filter = "Archivo separado por tabulaciones (*.txt)|*.txt";
                saveDialog.FileName = string.Format("UD_OT_{0}", DateTime.Now.ToString("ddMMyyyy"));

                LogicaNegocio.CentroCosto.UD.DetalleFactura_UDServicios_FamaBLL detalleFactura_serviciosBLL =
                    new LogicaNegocio.CentroCosto.UD.DetalleFactura_UDServicios_FamaBLL();

                if (saveDialog.ShowDialog() == DialogResult.OK)
                {
                    switch (saveDialog.FilterIndex)
                    {
                        case 1:
                            detalleFactura_serviciosBLL.exportarArchivo(saveDialog.FileName, gridBound, "TXT");
                            MessageBox.Show(string.Format("Archivo guardado correctamente en:\n{0}", saveDialog.FileName), "DBS-Spring", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                            break;
                    }
                }
            }
            else
            {
                MessageBox.Show("No hay registros en la cuadrícula.", "DBS-Spring", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }
        #endregion

        #region Alquileres
        private void btnFRAlq_Cargar_Click(object sender, EventArgs e)
        {
            LogicaNegocio.CentroCosto.UH.DetalleFactura_UHAlquileres_FamaBLL detalleFact_AlqBLL =
                new LogicaNegocio.CentroCosto.UH.DetalleFactura_UHAlquileres_FamaBLL();

            List<Entidades.CentroCosto.UH.DBS_Head_Detail_UHAlquileres> lista = detalleFact_AlqBLL.ListarFacturasAlquileresFAMA();

            List<Entidades.CentroCosto.UH.DBS_Head_Detail_UHAlquileres> listaAgrupada = detalleFact_AlqBLL.GetFilas_Agrupadas(detalleFact_AlqBLL.GetFilasNoDuplicados(lista), lista);
            List<Entidades.Spring.FacturaSpring_Detalle> result = detalleFact_AlqBLL.ToSpring_Detalle(listaAgrupada);

            gridFactAlq_FAMA.DataSource = null;
            gridFactAlq_FAMA.DataSource = result;
            gridFactAlq_FAMA.ClearSelection();

            lblFilas_FAlqFAMA.Text = result.Count.ToString("N");
        }

        private void btnFRAlqNOFAMA_Cargar_Click(object sender, EventArgs e)
        {
            LogicaNegocio.CentroCosto.UH.DetalleFactura_UHAlquileres_FamaBLL detalleFact_AlqBLL =
                new LogicaNegocio.CentroCosto.UH.DetalleFactura_UHAlquileres_FamaBLL();

            List<Entidades.CentroCosto.UH.DBS_Head_Detail_UHAlquileres> lista = detalleFact_AlqBLL.ListarFacturasAlquileresNOFAMA();

            List<Entidades.CentroCosto.UH.DBS_Head_Detail_UHAlquileres> listaAgrupada = detalleFact_AlqBLL.GetFilas_Agrupadas(detalleFact_AlqBLL.GetFilasNoDuplicados(lista), lista);
            List<Entidades.Spring.FacturaSpring_Detalle> result = detalleFact_AlqBLL.ToSpring_Detalle(listaAgrupada);

            gridFactAlq_NOFAMA.DataSource = null;
            gridFactAlq_NOFAMA.DataSource = result;
            gridFactAlq_NOFAMA.ClearSelection();

            lblFilas_FAlqNOFAMA.Text = result.Count.ToString("N");
        }

        private void btnFRAlqFAMA_Exportar_Click(object sender, EventArgs e)
        {
            List<Entidades.Spring.FacturaSpring_Detalle> gridBound = gridFactAlq_FAMA.DataSource as List<Entidades.Spring.FacturaSpring_Detalle>;

            if (gridBound != null)
            {
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.Filter = "Archivo separado por tabulaciones (*.txt)|*.txt";
                saveDialog.FileName = string.Format("UH_FAMA_{0}", DateTime.Now.ToString("ddMMyyyy"));

                LogicaNegocio.CentroCosto.UH.DetalleFactura_UHAlquileres_FamaBLL detalleFactura_alquilerBLL =
                    new LogicaNegocio.CentroCosto.UH.DetalleFactura_UHAlquileres_FamaBLL();

                if (saveDialog.ShowDialog() == DialogResult.OK)
                {

                    switch (saveDialog.FilterIndex)
                    {
                        case 1:
                            detalleFactura_alquilerBLL.exportarArchivo(saveDialog.FileName, gridBound, "TXT");
                            MessageBox.Show(string.Format("Archivo guardado correctamente en:\n{0}", saveDialog.FileName), "DBS-Spring", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                            break;
                    }
                }
            }
            else
            {
                MessageBox.Show("No hay registros en la cuadrícula.", "DBS-Spring", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btnFRAlqNOFAMA_Exportar_Click(object sender, EventArgs e)
        {
            List<Entidades.Spring.FacturaSpring_Detalle> gridBound = gridFactAlq_NOFAMA.DataSource as List<Entidades.Spring.FacturaSpring_Detalle>;

            if (gridBound != null)
            {
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.Filter = "Archivo separado por tabulaciones (*.txt)|*.txt";
                saveDialog.FileName = string.Format("UH_NOFAMA_{0}", DateTime.Now.ToString("ddMMyyyy"));

                LogicaNegocio.CentroCosto.UH.DetalleFactura_UHAlquileres_FamaBLL detalleFactura_alquilerBLL =
                    new LogicaNegocio.CentroCosto.UH.DetalleFactura_UHAlquileres_FamaBLL();

                if (saveDialog.ShowDialog() == DialogResult.OK)
                {

                    switch (saveDialog.FilterIndex)
                    {
                        case 1:
                            detalleFactura_alquilerBLL.exportarArchivo(saveDialog.FileName, gridBound, "TXT");
                            MessageBox.Show(string.Format("Archivo guardado correctamente en:\n{0}", saveDialog.FileName), "DBS-Spring", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                            break;
                    }
                }
            }
            else
            {
                MessageBox.Show("No hay registros en la cuadrícula.", "DBS-Spring", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        #endregion

        private void btnCargarGenerarCabecera_Click(object sender, EventArgs e)
        {
            if (chkFechaEmision.Checked)
            {
                if (dtFechaEmisionFin.Value.Date >= dtFechaEmisionInicio.Value.Date)
                {
                    DialogResult dr;

                    if ((dtFechaEmisionFin.Value - dtFechaEmisionInicio.Value).TotalDays > 31)
                    {
                        dr = MessageBox.Show("Advertencia: El intervalo ingresado hará que el sistema demore más de lo normal. ¿Esta seguro en continuar? ", "DBS2Spring", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                    }
                    else
                    {
                        dr = DialogResult.Yes;
                    }

                    if (dr == DialogResult.Yes)
                    {
                        DateTime fechaEmisionInicio = dtFechaEmisionInicio.Value;
                        DateTime fechaEmisionFin = dtFechaEmisionFin.Value;

                        LogicaNegocio.DBS_Header_FacturaBLL dbs_HeaderBLL = new LogicaNegocio.DBS_Header_FacturaBLL();
                        LogicaNegocio.CM_CO_Comprobante_InterfaseBLL spring_CabeceraBLL = new LogicaNegocio.CM_CO_Comprobante_InterfaseBLL();

                        //tsDescripcionEstado.Text = "Procesando...";
                        //tsProgreso.MarqueeAnimationSpeed = 100;

                        #region Carga de Registro de la Cabecera

                        //leemos la cabecera de facturas
                        //List<Entidades.DBS_Header_Factura> listaDBS = dbs_HeaderBLL.ListarAS400(fechaEmisionInicio, fechaEmisionFin);
                        List<Entidades.DBS_Header_Factura> listaDBS = dbs_HeaderBLL.ListarAS400(fechaEmisionInicio, fechaEmisionFin);

                        grid_DBS_Header.DataSource = null;
                        grid_DBS_Header.DataSource = listaDBS;
                        grid_DBS_Header.ClearSelection();
                        lbl_DBS_filas.Text = listaDBS.Count.ToString("N");

                        //convertimos a CM_CO_COMPROBANTE_INTERFASE
                        List<Entidades.Spring.CM_CO_Comprobante_Interfase> listaSpring = dbs_HeaderBLL.ToSpringCabecera(listaDBS);

                        grid_Spring_Header.DataSource = null;
                        grid_Spring_Header.DataSource = listaSpring;
                        grid_Spring_Header.ClearSelection();
                        lbl_Spring_filas.Text = listaSpring.Count.ToString("N");
                        #endregion

                        #region Exporta los Registros en archivo

                        int result = spring_CabeceraBLL.TR_Registrar(listaSpring);

                        if (result > 0)
                        {
                            MessageBox.Show(string.Format("Se han transferido {0} registros correctamente.", result), "DBS - Spring", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                        }
                        else
                        {
                            MessageBox.Show("Error al transferir los registros a CM_CO_COMPROBANTE_INTERFASE", "DBS - Spring", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                        }

                        #endregion

                        //tsDescripcionEstado.Text = "Datos de cabecera exportado";
                        //tsProgreso.MarqueeAnimationSpeed = 0;
                    }
                }
                else
                {
                    MessageBox.Show("La fecha final no puede ser menor a la fecha de inicio", "DBS2Spring", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("Indique el intervalo de fechas que va a realizar la consulta.\nEjemplo: 01/01/2014 - 10/01/2014", "DBS2Spring", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        private void btnCargarGenerarDetalle_Click(object sender, EventArgs e)
        {
            if (chkFechaEmision.Checked)
            {
                if (dtFechaEmisionFin.Value.Date >= dtFechaEmisionInicio.Value.Date)
                {
                    DialogResult dr;

                    if ((dtFechaEmisionFin.Value - dtFechaEmisionInicio.Value).TotalDays > 31)
                    {
                        dr = MessageBox.Show("Advertencia: El intervalo ingresado hará que el sistema demore más de lo normal. ¿Esta seguro en continuar? ", "DBS2Spring", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                    }
                    else
                    {
                        dr = DialogResult.Yes;
                    }

                    if (dr == DialogResult.Yes)
                    {
                        DateTime fechaEmisionInicio = dtFechaEmisionInicio.Value;
                        DateTime fechaEmisionFin = dtFechaEmisionFin.Value;

                        LogicaNegocio.CentroCosto.UC.DetalleFactura_UCRepuestosBLL detalleFact_RptosBLL =
                            new LogicaNegocio.CentroCosto.UC.DetalleFactura_UCRepuestosBLL();

                        LogicaNegocio.CentroCosto.UD.DetalleFactura_UDServicios_FamaBLL detalleFact_ServBLL =
                            new LogicaNegocio.CentroCosto.UD.DetalleFactura_UDServicios_FamaBLL();

                        LogicaNegocio.CentroCosto.UH.DetalleFactura_UHAlquileres_FamaBLL detalleFact_AlqBLL =
                            new LogicaNegocio.CentroCosto.UH.DetalleFactura_UHAlquileres_FamaBLL();

                        LogicaNegocio.CM_CO_ComprobanteDetalleBLL spring_DetalleBLL = new LogicaNegocio.CM_CO_ComprobanteDetalleBLL();

                        #region Carga de Registro de la Cabecera
                        List<Entidades.CentroCosto.UC.DBS_Head_Detail_Factura_UCRepuestos> lista1 = detalleFact_RptosBLL.ListarFacturaRepuestos_AS400(fechaEmisionInicio, fechaEmisionFin);
                        detalleFact_RptosBLL.CargarDetalle_LineAD_UCRepuestos(lista1);
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result1 = detalleFact_RptosBLL.ToSpringDetalle(lista1);
                        gridFactRepuestos.DataSource = null;
                        gridFactRepuestos.DataSource = result1;
                        gridFactRepuestos.ClearSelection();
                        lblfilas_Facturas.Text = result1.Count.ToString("N");

                        List<Entidades.CentroCosto.UC.DBS_Head_Detail_NotaCredito_UCRepuestos> lista2 = detalleFact_RptosBLL.ListarNotaCreditoRepuestos_AS400(fechaEmisionInicio, fechaEmisionFin);
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result2 = detalleFact_RptosBLL.ToSpringDetalle(lista2);
                        gridNotaCRepuestos.DataSource = null;
                        gridNotaCRepuestos.DataSource = result2;
                        gridNotaCRepuestos.ClearSelection();
                        lblFilas_NotasCredito.Text = result2.Count.ToString("N");


                        List<Entidades.CentroCosto.UD.DBS_Head_Detail_UDServicios> lista3 = detalleFact_ServBLL.ListarFacturasServiciosFAMA_AS400(fechaEmisionInicio, fechaEmisionFin);
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result3 = detalleFact_ServBLL.ToSpringDetalle(lista3);
                        gridFactServ_FAMA.DataSource = null;
                        gridFactServ_FAMA.DataSource = result3;
                        gridFactServ_FAMA.ClearSelection();
                        lblFilas_FServFAMA.Text = result3.Count.ToString("N");

                        List<Entidades.CentroCosto.UD.DBS_Head_Detail_UDServicios> lista4 = detalleFact_ServBLL.ListarFacturasServiciosOT_AS400(fechaEmisionInicio, fechaEmisionFin);
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result4 = detalleFact_ServBLL.ToSpringDetalle(lista4);
                        gridFactServ_OT.DataSource = null;
                        gridFactServ_OT.DataSource = result4;
                        gridFactServ_OT.ClearSelection();
                        lblFilas_FServOT.Text = result4.Count.ToString("N");


                        List<Entidades.CentroCosto.UH.DBS_Head_Detail_UHAlquileres> lista5 = detalleFact_AlqBLL.ListarFacturasAlquileresFAMA_AS400(fechaEmisionInicio, fechaEmisionFin);
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result5 = detalleFact_AlqBLL.ToSpringDetalle(lista5);
                        gridFactAlq_FAMA.DataSource = null;
                        gridFactAlq_FAMA.DataSource = result5;
                        gridFactAlq_FAMA.ClearSelection();
                        lblFilas_FAlqFAMA.Text = result5.Count.ToString("N");

                        List<Entidades.CentroCosto.UH.DBS_Head_Detail_UHAlquileres> lista6 = detalleFact_AlqBLL.ListarFacturasAlquileresNOFAMA_AS400(fechaEmisionInicio, fechaEmisionFin);
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result6 = detalleFact_AlqBLL.ToSpringDetalle(lista6);
                        gridFactAlq_NOFAMA.DataSource = null;
                        gridFactAlq_NOFAMA.DataSource = result6;
                        gridFactAlq_NOFAMA.ClearSelection();
                        lblFilas_FAlqNOFAMA.Text = result6.Count.ToString("N");
                        #endregion

                        #region Exporta los Registros en archivo
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> listResult = result1.Union(result2).Union(result3).Union(result4).Union(result5).Union(result6).ToList();

                        int result = spring_DetalleBLL.TR_Registrar(listResult);

                        if (result > 0)
                        {
                            MessageBox.Show(string.Format("Se han transferido {0} registros correctamente.", result), "DBS - Spring", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                        }
                        else
                        {
                            MessageBox.Show("Error al transferir los registros a CM_CO_COMPROBANTE_INTERFASE", "DBS - Spring", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                        }
                        #endregion
                    }
                }
                else
                {
                    MessageBox.Show("La fecha final no puede ser menor a la fecha de inicio", "DBS2Spring", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("Indique el intervalo de fechas que va a realizar la consulta.\nEjemplo: 01/01/2014 - 10/01/2014", "DBS2Spring", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        private void chkFechaEmision_CheckedChanged(object sender, EventArgs e)
        {
            if (chkFechaEmision.Checked)
            {
                dtFechaEmisionInicio.Enabled = true;
                dtFechaEmisionFin.Enabled = true;
            }
            else
            {
                dtFechaEmisionInicio.Enabled = false;
                dtFechaEmisionFin.Enabled = false;
            }
        }

        private void btnLeerDatos_Click(object sender, EventArgs e)
        {
            if (chkFechaEmision.Checked)
            {
                if (dtFechaEmisionFin.Value.Date >= dtFechaEmisionInicio.Value.Date)
                {
                    DialogResult dr;

                    if ((dtFechaEmisionFin.Value - dtFechaEmisionInicio.Value).TotalDays > 31)
                    {
                        dr = MessageBox.Show("Advertencia: El intervalo ingresado hará que el sistema demore más de lo normal. ¿Esta seguro en continuar? ", "DBS2Spring", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                    }
                    else
                    {
                        dr = DialogResult.Yes;
                    }

                    if (dr == DialogResult.Yes)
                    {
                        DateTime fechaEmisionInicio = dtFechaEmisionInicio.Value;
                        DateTime fechaEmisionFin = dtFechaEmisionFin.Value;

                        LogicaNegocio.DBS_Header_FacturaBLL dbs_HeaderBLL = new LogicaNegocio.DBS_Header_FacturaBLL();
                        LogicaNegocio.CM_CO_Comprobante_InterfaseBLL spring_CabeceraBLL = new LogicaNegocio.CM_CO_Comprobante_InterfaseBLL();

                        //tsDescripcionEstado.Text = "Procesando...";
                        //tsProgreso.MarqueeAnimationSpeed = 100;

                        #region Carga de Registro de la Cabecera
                        //leemos la cabecera de facturas
                        List<Entidades.DBS_Header_Factura> listaDBS = dbs_HeaderBLL.ListarAS400(fechaEmisionInicio, fechaEmisionFin);

                        grid_DBS_Header.DataSource = null;
                        grid_DBS_Header.DataSource = listaDBS;
                        grid_DBS_Header.ClearSelection();
                        lbl_DBS_filas.Text = listaDBS.Count.ToString("N");

                        //convertimos a CM_CO_COMPROBANTE_INTERFASE
                        List<Entidades.Spring.CM_CO_Comprobante_Interfase> listaSpring = dbs_HeaderBLL.ToSpringCabecera(listaDBS);

                        grid_Spring_Header.DataSource = null;
                        grid_Spring_Header.DataSource = listaSpring;
                        grid_Spring_Header.ClearSelection();
                        lbl_Spring_filas.Text = listaSpring.Count.ToString("N");
                        #endregion

                        #region Carga de Registro del detalle
                        LogicaNegocio.CentroCosto.UC.DetalleFactura_UCRepuestosBLL detalleFact_RptosBLL =
                            new LogicaNegocio.CentroCosto.UC.DetalleFactura_UCRepuestosBLL();

                        LogicaNegocio.CentroCosto.UD.DetalleFactura_UDServicios_FamaBLL detalleFact_ServBLL =
                            new LogicaNegocio.CentroCosto.UD.DetalleFactura_UDServicios_FamaBLL();

                        LogicaNegocio.CentroCosto.UH.DetalleFactura_UHAlquileres_FamaBLL detalleFact_AlqBLL =
                            new LogicaNegocio.CentroCosto.UH.DetalleFactura_UHAlquileres_FamaBLL();

                        LogicaNegocio.CM_CO_ComprobanteDetalleBLL spring_DetalleBLL = new LogicaNegocio.CM_CO_ComprobanteDetalleBLL();

                        List<Entidades.CentroCosto.UC.DBS_Head_Detail_Factura_UCRepuestos> lista1 = detalleFact_RptosBLL.ListarFacturaRepuestos_AS400(fechaEmisionInicio, fechaEmisionFin);
                        detalleFact_RptosBLL.CargarDetalle_LineAD_UCRepuestos(lista1);
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result1 = detalleFact_RptosBLL.ToSpringDetalle(lista1);

                        gridFactRepuestos.DataSource = null;
                        gridFactRepuestos.DataSource = result1;
                        gridFactRepuestos.ClearSelection();
                        lblfilas_Facturas.Text = result1.Count.ToString("N");

                        List<Entidades.CentroCosto.UC.DBS_Head_Detail_NotaCredito_UCRepuestos> lista2 = detalleFact_RptosBLL.ListarNotaCreditoRepuestos_AS400(fechaEmisionInicio, fechaEmisionFin);
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result2 = detalleFact_RptosBLL.ToSpringDetalle(lista2);
                        gridNotaCRepuestos.DataSource = null;
                        gridNotaCRepuestos.DataSource = result2;
                        gridNotaCRepuestos.ClearSelection();
                        lblFilas_NotasCredito.Text = result2.Count.ToString("N");


                        List<Entidades.CentroCosto.UD.DBS_Head_Detail_UDServicios> lista3 = detalleFact_ServBLL.ListarFacturasServiciosFAMA_AS400(fechaEmisionInicio, fechaEmisionFin);
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result3 = detalleFact_ServBLL.ToSpringDetalle(lista3);
                        gridFactServ_FAMA.DataSource = null;
                        gridFactServ_FAMA.DataSource = result3;
                        gridFactServ_FAMA.ClearSelection();
                        lblFilas_FServFAMA.Text = result3.Count.ToString("N");

                        List<Entidades.CentroCosto.UD.DBS_Head_Detail_UDServicios> lista4 = detalleFact_ServBLL.ListarFacturasServiciosOT_AS400(fechaEmisionInicio, fechaEmisionFin);
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result4 = detalleFact_ServBLL.ToSpringDetalle(lista4);
                        gridFactServ_OT.DataSource = null;
                        gridFactServ_OT.DataSource = result4;
                        gridFactServ_OT.ClearSelection();
                        lblFilas_FServOT.Text = result4.Count.ToString("N");


                        List<Entidades.CentroCosto.UH.DBS_Head_Detail_UHAlquileres> lista5 = detalleFact_AlqBLL.ListarFacturasAlquileresFAMA_AS400(fechaEmisionInicio, fechaEmisionFin);
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result5 = detalleFact_AlqBLL.ToSpringDetalle(lista5);
                        gridFactAlq_FAMA.DataSource = null;
                        gridFactAlq_FAMA.DataSource = result5;
                        gridFactAlq_FAMA.ClearSelection();
                        lblFilas_FAlqFAMA.Text = result5.Count.ToString("N");

                        List<Entidades.CentroCosto.UH.DBS_Head_Detail_UHAlquileres> lista6 = detalleFact_AlqBLL.ListarFacturasAlquileresNOFAMA_AS400(fechaEmisionInicio, fechaEmisionFin);
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result6 = detalleFact_AlqBLL.ToSpringDetalle(lista6);
                        gridFactAlq_NOFAMA.DataSource = null;
                        gridFactAlq_NOFAMA.DataSource = result6;
                        gridFactAlq_NOFAMA.ClearSelection();
                        lblFilas_FAlqNOFAMA.Text = result6.Count.ToString("N");
                        #endregion
                    }
                }
                else
                {
                    MessageBox.Show("La fecha final no puede ser menor a la fecha de inicio", "DBS2Spring", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("Indique el intervalo de fechas que va a realizar la consulta.\nEjemplo: 01/01/2014 - 10/01/2014", "DBS2Spring", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        private void btnCargarSpring_Click(object sender, EventArgs e)
        {
            if (grid_Spring_Header.Rows.Count > 0)
            {
                DialogResult dr = MessageBox.Show("¿Esta seguro en transferir los registros al sistema spring?", "DBS2Spring", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

                if (dr == DialogResult.Yes)
                {
                    LogicaNegocio.CM_CO_Comprobante_InterfaseBLL spring_CabeceraBLL = new LogicaNegocio.CM_CO_Comprobante_InterfaseBLL();
                    List<Entidades.Spring.CM_CO_Comprobante_Interfase> listaSpring = grid_Spring_Header.DataSource as List<Entidades.Spring.CM_CO_Comprobante_Interfase>;

                    if (listaSpring != null)
                    {
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result1 = gridFactRepuestos.DataSource as List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase>;
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result2 = gridNotaCRepuestos.DataSource as List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase>;
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result3 = gridFactServ_FAMA.DataSource as List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase>;
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result4 = gridFactServ_OT.DataSource as List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase>;
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result5 = gridFactAlq_FAMA.DataSource as List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase>;
                        List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> result6 = gridFactAlq_NOFAMA.DataSource as List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase>;

                        if (result1 != null && result2 != null && result3 != null &&
                            result4 != null && result5 != null && result6 != null)
                        {
                            List<Entidades.Spring.CM_CO_ComprobanteDetalle_Interfase> listaSpringDetalle = result1.Union(result2).Union(result3).Union(result4).Union(result5).Union(result6).ToList();

                            spring_CabeceraBLL.AjustarMontos_CabeceraDetalle(listaSpring, listaSpringDetalle);
                            List<int> resultadoRegistro = spring_CabeceraBLL.Registrar(listaSpring, listaSpringDetalle);

                            if (resultadoRegistro.Count == 3)
                            {
                                MessageBox.Show(string.Format("Registros de cabecera: {0}\nRegistros de Detalle: {1}\nPROCESO DE CARGA: {2}\nEl proceso ha terminado satisfactoriamente.", resultadoRegistro[0].ToString(), resultadoRegistro[1].ToString(), resultadoRegistro[2].ToString()), "DBS - Spring", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                            }
                            else
                            {
                                MessageBox.Show("Error al transferir los registros a CM_CO_COMPROBANTE_INTERFASE", "DBS - Spring", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                            }
                        } 
                    }
                }
            }
            else
            {
                MessageBox.Show("Los registros de cabecera se encuentran vacíos. Ejecute el proceso 'Leer datos'", "DBS - Spring", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        //private void button1_Click(object sender, EventArgs e)
        //{
        //    LogicaNegocio.CabeceraFacturaBLL cabBLL = new LogicaNegocio.CabeceraFacturaBLL();

        //    dataGridView1.DataSource = null;
        //    dataGridView1.DataSource = cabBLL.consulta();
        //}
    }
}
